package com.xxxtea.config;

import com.baomidou.mybatisplus.autoconfigure.ConfigurationCustomizer;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.TenantLineInnerInterceptor;
import com.xxxtea.component.MerchantTenantLineHandler;
import com.xxxtea.component.SqlPrintInterceptor;
import com.xxxtea.component.UserTenantLineHandler;
import com.xxxtea.mpe.interceptor.UnionTableInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import javax.annotation.Resource;

/**
 * MyBatis-Plus配置类
 * 
 * 配置MyBatis-Plus的各种拦截器和功能，包括：
 * - 数据隔离拦截器（多租户支持）
 * - 联表查询拦截器
 * - 分页拦截器
 * - SQL打印拦截器
 * 
 * @author badman
 * @since 1.0.0
 */
@Configuration
public class MyBatisPlusConfig {
	
	/**
	 * 联表查询拦截器
	 * 用于处理复杂的联表查询逻辑
	 */
	@Resource
	private UnionTableInterceptor unionTableInterceptor;

	/**
	 * 配置MyBatis-Plus拦截器
	 * 添加各种功能拦截器，按执行顺序配置
	 * 
	 * @return MyBatis-Plus拦截器配置
	 */
	@Bean
	public MybatisPlusInterceptor mybatisPlusInterceptor() {
		MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();
		
		// 数据隔离拦截器 - 用户租户隔离
		mybatisPlusInterceptor.addInnerInterceptor(new TenantLineInnerInterceptor(new UserTenantLineHandler()));
		// 数据隔离拦截器 - 商家租户隔离
		mybatisPlusInterceptor.addInnerInterceptor(new TenantLineInnerInterceptor(new MerchantTenantLineHandler()));
		// 联表查询拦截器 - 处理复杂联表查询
		mybatisPlusInterceptor.addInnerInterceptor(unionTableInterceptor);
		// 分页拦截器 - 自动处理分页查询
		mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor());
		
		return mybatisPlusInterceptor;
	}

	/**
	 * 配置MyBatis配置自定义器
	 * 添加SQL打印拦截器，用于开发调试
	 * 
	 * @return MyBatis配置自定义器
	 */
	@Bean
	public ConfigurationCustomizer configurationCustomizer() {
		return configuration -> configuration.addInterceptor(new SqlPrintInterceptor());
	}
}
